package com.alibaba.smart.framework.engine.deployment;

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

import com.alibaba.smart.framework.engine.bpmn.behavior.gateway.tree.ActivityTreeNode;
import com.alibaba.smart.framework.engine.model.assembly.ProcessDefinition;
import com.alibaba.smart.framework.engine.pvm.PvmProcessDefinition;

/**
 * @author 高海军 帝奇  2016.11.11
 * @author ettear 2016.04.13
 */
public interface ProcessDefinitionContainer {

  Map<String, PvmProcessDefinition> getPvmProcessDefinitionConcurrentHashMap();

  Map<String, ProcessDefinition> getProcessDefinitionConcurrentHashMap();


  /**
   * 安装流程
   *
   * @param pvmProcessDefinition 流程
   * @param processDefinition
   */
  void install(PvmProcessDefinition pvmProcessDefinition, ProcessDefinition processDefinition);

  /**
   * @param processDefinitionId
   * @param version
   */
  void uninstall(String processDefinitionId, String version);

  void uninstall(String processDefinitionId, String version, String tenantId);

  /**
   * 获取流程
   *
   * @param processDefinitionId 流程ID
   * @param version             版本
   * @return 流程
   */
  PvmProcessDefinition getPvmProcessDefinition(String processDefinitionId, String version);

  PvmProcessDefinition getPvmProcessDefinition(String processDefinitionId, String version, String tenantId);

  /**
   * 获取流程
   *
   * @param uri 流程URI
   * @return 流程
   */
  PvmProcessDefinition getPvmProcessDefinition(String uri);


  ProcessDefinition getProcessDefinition(String processDefinitionId, String version);

  ProcessDefinition getProcessDefinition(String processDefinitionId, String version, String tenantId);

  ProcessDefinition getProcessDefinition(String uri);
}
